home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / newmake.arc / PARSEDIR.C < prev    next >
Text File  |  1986-09-21  |  2KB  |  111 lines

  1. #include <stdio.h>
  2. #include "make.h"
  3. #ifdef VAXVMS
  4. #include <rms.h>
  5. #endif
  6.  
  7.  
  8. /*
  9.  * Get a file's creation date.
  10.  */
  11. int getdate(f)
  12. FILENODE *f;
  13. {
  14.     if(f->fdate != NULL || filedate(f) != -1) return;
  15.  
  16.     if(f->fflag & ROOTP == 0)
  17.     {
  18.         fprintf(stderr, "Can't get date for file '%s'\n", f->fname);
  19.         f->fdate = endoftime;
  20.     } else f->fdate = bigbang;
  21.     return;
  22. }
  23.  
  24.  
  25. #ifdef VAXVMS
  26. /*
  27.  * filedate - return file's creation date (VAX/VMS only.)
  28.  * Returns -1 if file cannot be found, 0 if succesful.
  29.  */
  30. filedate(fnd)
  31. FILENODE *fnd;
  32. {
  33.     unsigned *datetime;
  34.     DATE adate();
  35.     struct FAB *fptr;
  36.     struct XABDAT *dptr;
  37.  
  38.     fptr = malloc(sizeof(struct FAB));    /* allocate FAB and XABDAT */
  39.     dptr = malloc(sizeof(struct XABDAT));
  40.     if(fptr == NULL || dptr == NULL) allerr();
  41.     *fptr = cc$rms_fab;            /* initialize FAB and XABDAT */
  42.     *dptr = cc$rms_xabdat;
  43.     fptr->fab$l_xab = (char *) dptr;    /* FAB -> XABDAT */
  44.  
  45.     fptr->fab$l_fna = fnd->fname;        /* setup filename */
  46.     fptr->fab$b_fns = strlen(fnd->fname);
  47.  
  48.     if(sys$open(fptr) != RMS$_NORMAL ||    /* open the file */
  49.        sys$display(fptr) != RMS$_NORMAL)    /* get XABDAT info */
  50.         return -1;
  51.  
  52.     datetime = &(dptr->xab$q_cdt);        /* record 64-bit date */
  53.     fnd->fdate = adate(datetime[0], datetime[1]);
  54.  
  55.     sys$close(fptr);            /* close the file */
  56.  
  57.     free(dptr);                /* clean up and return */
  58.     free(fptr);
  59.     return 0;
  60. }
  61. #endif
  62.  
  63.  
  64. #ifdef MSDOS
  65. /*
  66.  * filedate - return file's creation date (MSDOS only.)
  67.  * Returns -1 if file cannot be found, 0 if successful
  68.  */
  69. filedate(fnd)
  70. FILENODE *fnd;
  71. {
  72.     unsigned date, time;
  73.     DATE adate();
  74.  
  75.     if(osdate(fnd->fname, &time, &date) == -1) return -1;
  76.     fnd->fdate = adate(time, date);
  77. }
  78. #endif
  79.  
  80.  
  81. /*
  82.  * laterdt - compare two dates.
  83.  * Return -1, 0 or 1 if date1 < date2, date1 == date2, or date1 > date2
  84.  */
  85. laterdt(date1, date2)
  86. DATE date1, date2;
  87. {
  88.     if(date1->ds_high > date2->ds_high ||
  89.        (date1->ds_high >= date2->ds_high &&
  90.         date1->ds_low > date2->ds_low)) return 1;
  91.     else if(date1->ds_high == date2->ds_high &&
  92.        date1->ds_low == date2->ds_low) return 0;
  93.     else return -1;
  94. }
  95.  
  96.  
  97. /*
  98.  * adate - allocate a date with the given time
  99.  */
  100. DATE adate(time1, time2)
  101. unsigned time1, time2;
  102. {
  103.     DATE d;
  104.  
  105.     if((d = (DATE)malloc(sizeof(struct date_str))) == NULL) allerr();
  106.     d->ds_low = time1;
  107.     d->ds_high = time2;
  108.     return d;
  109.  
  110. }
  111.